<?php
require_once './includes/bancodedados.php';
class modelo {
	private $db;
	private $cache;
	function modelo() {
		$this->db = banco::getInstanceDBMain ();
		$this->cache = banco::getInstanceDBCache ();
	}
	
	function blacklistCheck($mac) {
		//Checa na BlackList
		if ($this->db->onBlackList ( $mac )) {
			return false;
		}
		return true;
	}
	
	function setResults($job_id,$result){
		//TODO Checa se o job ainda existe
		if(!$this->cache->existJob($job_id)){
			return false;
		}

		//TODO Jogar o Resultado pro Banco
		
		
		//TODO Atualiza a contribuição do usuario
				
		//Seta o JOB como done
		$this->cache->setJobDone($job_id,true);
		
		
		
	}
	
	function areRelated($mac, $id_anal) {
		return $this->db->macWorkingFor ( $mac, $id_anal );
	}
	
	function analysisIsDone($id_anal) {
		return $this->db->isDone (  $id_anal );
	}
	
	function realocate($mac) {
		$this->db->realocate ( $mac );
	}
	
	function checkIn($mac, $mail) {
		//TODO Validação
		//$fs = $get ['fs'];
		//$us = $get ['us'];
		

		//Checa se o Usuario Existe
		if (! $this->db->existAccount ( $mail )) {
			return false;
		}
		
		//Checa se existe o MAC: Se existir, atualiza user. Senão, cria um novo em Machine
		if (! $this->db->existMac ( $mac )) {
			//echo "Inserindo MAC <br>";
			$this->db->insertMacOnMachine ( $mac, $mail, $so, $ram, $procs );
		} else {
			$this->db->updateMac ( $mac, $mail );
		}
		
		return true;
	
	}
	
	function getSeqs($mac, $id_anal, $num, $md5s_seq_db, $md5s_seq_in){
		//THINK Jogar esse balanceamento para a cliente. E trocar por dois GETs, getSeqDb e getSeqIn
		
		
		
		//Se o usuario nao tem Seq_In, ele nivela as quantidades a serem enviadas
		if(count($md5s_seq_in) <= 0){
			$num_seq_db = round($num/2);
		}else{
			$num_seq_db = $num;
		}
		
		//Buscas os Ids das SeqIn pelo MD5 
		$old_seq_in_ids = $this->db->getSeqIdByMd5($md5s_seq_in);
		
		//Manda Buscar as SeqDb dependendo das Seq_In do usuario ja tem
		$new_seq_db_ids = $this->cache->getSeqDb($id_anal,$old_seq_in_ids,$num_seq_db);
		
		//Dependendo de quantos seq_db voltarem, ele calcula qts seq_in deve enviar
		$num_seq_in = $num - count($new_seq_db_ids);
		
		if($num_seq_in > 0){
			$old_seq_db_ids = $this->db->getSeqIdByMd5($md5s_seq_db);
			$new_seq_in_ids = $this->cache->getSeqIn($id_anal,$old_seq_db_ids,$num_seq_in);
		}else{
			$new_seq_in_ids = array();
		}
		
		$id_mac = $this->db->getMacIdByMac($mac);
		$id_job = $this->cache->createJob($id_mac,$id_anal,$old_seq_db_ids,$new_seq_db_ids,$old_seq_in_ids,$new_seq_in_ids);
		
		$seq_db = getSeqById($new_seq_db_ids);
		$seq_in = getSeqById($new_seq_in_ids);
		
		$resp = array("id_job" =>  $id_job, "seq_db" => $seq_db , "seq_in", $seq_in );
		return $resp;
	}
}
abstract class model {
	private  $modelo;
	
	function getInstance() {
		if (! isset ( $modelo )) {
			$modelo = new modelo ( );
		}
		return $modelo;
	}

}
?>